#include <stdio.h>
#include <stdlib.h>
#define MAXSIZE 10

typedef struct Stack
{
    int data[MAXSIZE];
    int top;
} Stack;

// 初始化栈
void InitStack(Stack &S)
{
    S.top = -1;
}

// 判断栈空
bool Empty(Stack &S)
{
    if (S.top == -1)
    {
        return true;
    }
    else
    {
        return false;
    }
}

// 新元素入栈
bool Push(Stack &S, int x)
{
    if (S.top == MAXSIZE - 1)
    {
        return false; // 栈满
    }
    else
    {
        S.top = S.top + 1;
        S.data[S.top] = x; // S中S.top指向的位置进行赋值（S.data是数组格式）
        // 上述两句等价于S.data[++S.top] = x
        return true;
    }
}

// 出栈操作
bool Pop(Stack &S, int &x)
{
    if (S.top == -1)
    {
        return false; // 栈空
    }
    else
    {
        x = S.data[S.top];
        S.top = S.top - 1;
        // s上述两句等价于x = S.data[S.top--]
        return true;
    }
}

// 去栈顶元素
bool GetTop(Stack &S, int &x)
{
    if (S.top == -1)
    {
        return false;
    }
    else
    {
        x = S.data[S.top];
        return true;
    }
}

int main()
{
    Stack s;
    InitStack(s);
}